package io.youngledo.usb.storage;

import java.time.LocalDateTime;

public record StorageObject(
    String key,           // 对象完整路径/键
    String name,          // 显示名称（通常是文件名）
    long size,            // 文件大小（字节）
    LocalDateTime lastModified, // 最后修改时间
    boolean isDirectory,  // 是否为目录
    String etag          // 实体标签（可选）
) {

    // 简化构造方法 - 用于文件
    public static StorageObject file(String key, String name, long size, LocalDateTime lastModified) {
        return new StorageObject(key, name, size, lastModified, false, null);
    }

    // 简化构造方法 - 用于目录
    public static StorageObject directory(String key, String name) {
        return new StorageObject(key, name, 0, null, true, null);
    }

    // 格式化文件大小
    public String getFormattedSize() {
        if (isDirectory) return "";

        if (size < 1024) return size + " B";
        int exp = (int) (Math.log(size) / Math.log(1024));
        String pre = "KMGTPE".charAt(exp - 1) + "";
        return String.format("%.1f %sB", size / Math.pow(1024, exp), pre);
    }

    // 获取文件扩展名
    public String getExtension() {
        if (isDirectory || name == null) return "";

        int lastDotIndex = name.lastIndexOf('.');
        if (lastDotIndex > 0 && lastDotIndex < name.length() - 1) {
            return name.substring(lastDotIndex + 1).toLowerCase();
        }
        return "";
    }

    // 判断是否为图片文件
    public boolean isImage() {
        String ext = getExtension();
        return "jpg".equals(ext) || "jpeg".equals(ext) || "png".equals(ext) ||
               "gif".equals(ext) || "bmp".equals(ext) || "webp".equals(ext);
    }

    // 判断是否为文档文件
    public boolean isDocument() {
        String ext = getExtension();
        return "pdf".equals(ext) || "doc".equals(ext) || "docx".equals(ext) ||
               "xls".equals(ext) || "xlsx".equals(ext) || "ppt".equals(ext) ||
               "pptx".equals(ext) || "txt".equals(ext);
    }
}